/**  
 * @Title: GoodsService.java
 * @Package com.silverbox.sweeporder.service.index
 * @author litao
 * @date 2018年1月17日
 */
package com.silverbox.sweeporder.service.index;

import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.silverbox.core.result.CoreResponse;
import com.silverbox.shopper.entity.extend.RequiredCategory;
import com.silverbox.sweeporder.controller.index.entryvo.KoubeiRecomEntryVO;
import com.silverbox.sweeporder.controller.index.entryvo.NeedGoodsAddCart;
import com.silverbox.sweeporder.controller.index.vo.CopyGoodsVO;
import com.silverbox.sweeporder.controller.index.vo.GoodsPractVO;
import com.silverbox.sweeporder.controller.index.vo.GoodsPropsCVO;
import com.silverbox.sweeporder.controller.index.vo.GoodsVO;
import com.silverbox.sweeporder.controller.index.vo.GroupPackageSuitVO;
import com.silverbox.sweeporder.controller.index.vo.GroupPackageVO;
import com.silverbox.sweeporder.controller.index.vo.KoubeiRecommendGoodsVO;
import com.silverbox.sweeporder.controller.index.vo.OrdinaryPackageCVO;
import com.silverbox.sweeporder.controller.index.vo.OrdinaryPackageVO;
import com.silverbox.sweeporder.controller.index.vo.QrcodeGoodsVO;
import com.silverbox.sweeporder.controller.index.vo.ShopperGoodsVO;
import com.silverbox.waimai.entity.extend.AlreadyGoods;

/**
 * ClassName: GoodsService
 * 
 * @author litao
 * @date 2018年1月17日
 */
public interface GoodsService {

	/**
	 * 获取店铺所有商品基本信息
	 * 	
	 * @param shopperId  		主店铺Id
	 * @param storeId	 		子店铺Id
	 * @param shopId			口碑门店Id
	 * @param machineId			绑定机器Id
	 * @return CoreResponse<ShopperGoodsVO>
	 * @author litao
	 * @param reserveDate 
	 * @param cookId 
	 * @date 2018年1月17日
	 */
	CoreResponse<ShopperGoodsVO> getShopperGoodsInfo(Integer shopperId, Integer storeId, String shopId, Long machineId,
             String tableUid, Integer clientOrderMode, Integer clientType, String appointmentTime, String reserveDate) throws ParseException;

	/**
	 * 获取店铺所有商品的加料及属性信息
	 * 
	 * @param storeId		子店铺id
	 * @param shopperId		主店铺id
	 * @return Map<Integer,GoodsPropsCVO>
	 * @author litao
	 * @date 2018年1月17日
	 */
	Map<Integer, GoodsPropsCVO> getAllGoodsPropInfo(Integer storeId, Integer shopperId);

	/**
	 * 获取店铺所有的普通套餐商品详情
	 * 
	 * @param shopperId 主店铺id
	 * @return Map<Integer,OrdinaryPackageCVO>
	 * @author litao
	 * @date 2018年1月17日
	 */
	Map<Integer, OrdinaryPackageCVO> getAllNormalPackageGoods(Integer shopperId);

	/**
	 * 获取所有组合套餐的商品
	 * 
	 * @param storeId	子店铺id
	 * @param shopperId	主店铺id
	 * @return Map<Integer,GroupPackageVO>
	 * @author litao
	 * @date 2018年1月17日
	 */
	Map<Integer, GroupPackageVO> getGroupPackageGoodsById(Integer storeId, Integer shopperId);

	/**
	 * 获取店铺未绑定到菜品上的属性信息(店铺及属性)
	 * 
	 * @param shopperId	主店铺id
	 * @param storeId	子店铺id
	 * @return CoreResponse<List<GoodsPractVO>>  
	 * @author litao
	 * @date 2018年1月22日
	 */
	CoreResponse<List<GoodsPractVO>> getShopperPropInfo(Integer shopperId,Integer storeId);

	/**
	 * 获取商品信息根据商品名称查询
	 * 
	 * @param goodsName			商品名称   
	 * @param machineId 		绑定机器id
	 * @param shopperId 		主店铺id
	 * @param storeId 			子店铺id
	 * @param shopId 			口碑门店id
	 * @return CoreResponse<List<GoodsVO>>  
	 * @author litao
	 * @date 2018年1月24日
	 */
	CoreResponse<List<GoodsVO>> getGoodsInfoByGoodsName(Integer shopperId, Integer storeId, String shopId,Long machineId,
			String goodsName);

	/**
	 * 获取仿菜页面桌台及菜品信息
	 * 
	 * @param  storeId 			子店铺id
	 * @param  tableUid			桌台uid
	 * @return CoreResponse<List<CopyGoodsVO>> 
	 * @author litao
	 * @date 2018年1月25日
	 */
	CoreResponse<List<CopyGoodsVO>> getCopyPageInfo(Integer storeId, String tableUid);
	
	/**
	 * 获取单个商品的组合套餐的信息
	 * 
	 * @param storeId			子店铺id
	 * @param shopperId			主店铺id
	 * @param goodsId			商品id
	 * @return List<GroupPackageSuitVO>
	 * @author litao
	 * @date 2018年1月17日
	 */
	List<GroupPackageSuitVO> getSingleGroupPackageGoods(Integer storeId, Integer shopperId,Integer goodsId);

	/**
	 * 获取单个商品的加料及属性信息
	 * 
	 * @param storeId			子店铺id
	 * @param shopperId			主店铺id
	 * @param goodsId			商品id
	 * @return Map<Integer,GoodsPropsCVO>
	 * @author litao
	 * @date 2018年1月17日
	 */
	Map<Integer, GoodsPropsCVO> getSingleGoodsPropInfo(Integer goodsId,Integer storeId, Integer shopperId);
	
	/**
	 * 获取单个商品的普通套餐商品详情
	 * 
	 * @param shopperId			主店铺id
	 * @param goodsId			商品id
	 * @return List<OrdinaryPackageVO>
	 * @author litao
	 * @date 2018年1月17日
	 */
	List<OrdinaryPackageVO> getSingleNormalPackageGoods(Integer shopperId, Integer storeId, Integer goodsId);

	/**
	 * 获取单个商品的组合套餐商品信息（包含加料及做法属性信息）
	 * @param  storeId		子店铺id	
	 * @param  shopperId	主店铺id
	 * @param  goodsId		商品id
	 * @return List<GroupPackageSuitVO>  
	 * @author litao
	 * @date 2018年5月8日
	 */
	List<GroupPackageSuitVO> getSingleGroupPackageGoodsByProp(Integer storeId, Integer shopperId, Integer goodsId);

	/**
	 * 口碑推荐菜
	 * @param  koubeiRecomEntry
	 * @return CoreResponse<List<KoubeiRecommendGoodsVO>>  
	 * @author litao
	 * @date 2018年5月10日
	 */
	CoreResponse<List<KoubeiRecommendGoodsVO>> getKoubeiRecommendGoodsList(KoubeiRecomEntryVO koubeiRecomEntry);

	/**
	 * 获取必点 菜并加入购物车
	 * @param neddGoodsAddCart
	 */
	CoreResponse<Map<String,Integer>> getNeedGoodsAddCart(NeedGoodsAddCart neddGoodsAddCart);
	
	/**
	 * 获取已点过的菜
	 * @param storeId
	 * @param
	 * @return
	 */
	List<AlreadyGoods> getAlreadyGoods(Integer storeId,Long thirdUserInfoId);
	
	/**
	 * 获取单个商品信息
	 * @param storeId
	 * @param goodsId
	 * @param sizeId
	 */
	QrcodeGoodsVO getQrcodeGoodsInfo(Integer storeId, Integer goodsId, Long sizeId);
	
}
